/**
 * Historico de alteração
 *
 * Data         Autor   Descrição
 * 24/10/2010   Jerry   Criação do cabeçalho.
 *
 */

package Conexao;

import Dados.Fila;
import java.io.IOException;
import java.net.Socket;
import Dados.Enderecos;

/**
 *
 * @author Bruno
 */
public class GerenciaConexao {

    Conexao[] conexoes;
    Fila fila_tabela;
    Fila fila_instrumentos;
    Fila fila_bd;
    String[] ips;
    int[] portas;
    boolean status_tabela = false;
    boolean status_instrumentos = false;
    boolean status_bd = false;
    private Enderecos lista_enderecos;

    public GerenciaConexao(String[] ips, int[] portas, Fila fila_tabela, Fila fila_instrumentos, Fila fila_bd, boolean status_tabela, boolean status_instrumentos, boolean status_bd, Enderecos lista_enderecos) {
           this.fila_tabela = fila_tabela;
           this.fila_instrumentos = fila_instrumentos;
           this.fila_bd = fila_bd;
           this.ips = ips;
           this.portas = portas;
           this.status_tabela = status_tabela;
           this.status_instrumentos = status_instrumentos;
           this.status_bd = status_bd;
           this.lista_enderecos = lista_enderecos;
           iniciaConexoes(ips.length);
    }

    private Conexao conecta(String ip, int porta) {
        Conexao conexao = null;
        Cliente cliente = null;
        Socket socket = null;
        try {
            socket = new Socket(ip, porta);
            cliente = new Cliente(socket, fila_tabela, fila_instrumentos, fila_bd, status_tabela, status_instrumentos, status_bd, lista_enderecos);
            conexao = new Conexao(cliente, ip, porta, true);
          
           return conexao;
        } catch (IOException ex) {
            ex.printStackTrace();
            conexao = new Conexao(cliente, ip, porta, false);
            return conexao;
        }
    }

    private void iniciaConexoes(int numero_conexoes) {
        conexoes = new Conexao[numero_conexoes];
        for(int i = 0; i < numero_conexoes; i++) {
            conexoes[i] = conecta(ips[i], portas[i]);
            conexoes[i].cliente.start();
        }
    }

    public void fechaConexoes() {
        for(int i = 0; i < ips.length; i++) {
            conexoes[i].cliente.stop();
            conexoes[i].conectado = false;
            try {
                conexoes[i].cliente.getSocket().close();
            } catch(IOException ex) {
                ex.printStackTrace();
            }
        }
    }

}
